package com.atguigu.gmall.order.service;

import com.atguigu.gmall.model.order.OrderInfo;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Map;

/**
* @author lfy
* @description 针对表【order_info_1(订单表 订单表)】的数据库操作Service
* @createDate 2022-03-21 16:49:50
*/
public interface OrderInfoService extends IService<OrderInfo> {

    /**
     * 生成订单流水追踪号
     * @param userId
     * @return
     */
    String generateOrderTradeNo(Long userId);


    /**
     * 验证并销毁这个令牌
     * @param token
     * @return
     *  true: 验令牌成功并销毁了
     *  false: 验令牌失败，或销毁失败
     */
    boolean checkUserTradenoToken(String token);


    /**
     * 生成订单
     * @param orderInfo   前端提交的页面的基本
     * @param tradeNo     前端提交的流水号
     * @return
     */
    OrderInfo submitOrder(OrderInfo orderInfo, String tradeNo);


    /**
     * 订单大保存
     * @param orderInfo
     * @return
     */
    OrderInfo orderBigSave(OrderInfo orderInfo);

    /**
     * 订单超时关闭
     * @param orderId
     * @param userId
     */
    void closeTimeoutOrder(Long orderId, Long userId);


    /**
     * 获取某个用户指定订单信息
     * @param orderId
     * @param userId
     * @return
     */
    OrderInfo getOrderById(Long orderId,Long userId);


    /**
     * 修改订单状态
     * @param userId
     * @param trade_no
     * @param orderStatus
     * @param processStatus
     */
    void updateOrderStatus(long userId, String trade_no, String orderStatus, String processStatus);

    /**
     * 按照对外流水号，查出订单信息以及详情呢绒
     * @param trade_no
     * @param userId
     * @return
     */
    OrderInfo getOrderByOutTradeNo(String trade_no, long userId);

    /**
     * 根据库存系统传入的sku仓库分布进行拆单
     * @param orderId
     * @param wareSkuMap
     * 返回拆单保存后的结果
     */
    List<Map<String, Object>> spiltSaveOrder(Long orderId, String wareSkuMap);

    /**
     * 修改订单状态
     * @param id
     * @param userId
     * @param orderStatus
     * @param processStatus
     */
    void updateOrderStatusById(Long id, Long userId, String orderStatus, String processStatus);
}
